/**
 * Created by LiuJie on 2017/10/18.
 */
function Validator() {
}
Validator.prototype = {
    require: function (value) {
        if (value != undefined && value !== "") {
            return true;
        } else {
            return false;
        }
    },
    length:function (value,params) {
        if(value!=""){
            if(value.length >=params[0] && value.length <= params[1]){
                return true;
            }else{
                return false;
            }
        }else{
            return true;
        }
    },
    CHS: function (value){
        return /^[\u0391-\uFFE5]+$/.test(value);
    },
    english : function (value){// 验证英语
        return /^[A-Za-z]+$/i.test(value);
    },
    ip : function (value){// 验证IP地址
        return /\d+\.\d+\.\d+\.\d+/.test(value);
    },
    ZIP: function (value){
        return /^[0-9]\d{5}$/.test(value);
    },
    numberBit:function(value,param){
        var _bit = !isNaN(param[0]) ? parseInt(param[0]) : 0;
        var patten = new RegExp("^[0-9]\\d{" +_bit+ "}$","gi");
        return patten.test(value);
    },
    sixNumber:function (value){
        return /^[0-9]\d{5}$/.test(value);

    },
    fourNumber:function (value){
        return /^[0-9]\d{3}$/.test(value);
    },
    eighteenNumber:function(value){
        return /^[0-9]\d{17}$/.test(value);
    },
    manyNumber:function(value,param){
        if(param!="" && param!=null){
            return /^\d{18}$/.test(value);
        }
    },
    QQ: function (value){
        return /^[1-9]\d{4,10}$/.test(value);
    },
    mobile: function (value){
        return/^1[0-9]{10}$/.test(value);
    },
    mobilePhone:function(value){
        if(value!=""){
            return/^1[0-9]{10}$/.test(value);
        }
        return true;
    },
    mobilePhoneAndPhone:function(value){
        if(value){
            return/(^1[0-9]{10}$)|(^[0-9]{3,5}\-[0-9]{7,8}$)/.test(value);
        }else{
            return true;
        }
    },
    tel:function(value){
        return/^[0-9]{3,5}\-[0-9]{7,8}$/.test(value);
    },
    mobileAndTel: function (value){
        return /(^([0\+]\d{2,3})\d{3,4}\-\d{3,8}$)|(^([0\+]\d{2,3})\d{3,4}\d{3,8}$)|(^([0\+]\d{2,3}){0,1}13\d{9}$)|(^\d{3,4}\d{3,8}$)|(^\d{3,4}\-\d{3,8}$)/.test(value);
    },
    number: function (value){
        return /^[0-9]+\.?[0-9]*$/.test(value);
    },
    isNumber:function (value) {
        return /^(-[0-9])?[0-9]*(\.[0-9])*$/.test(value);
    },
    money:function (value){
        return (/^(([1-9]\d*)|\d)(\.\d{1,2})?$/).test(value);

    },
    mone:function (value){
        return (/^(([1-9]\d*)|\d)(\.\d{1,2})?$/).test(value);

    },
    integer:function(value){
        return /^[+]?[1-9]\d*$/.test(value);
    },
    integ:function(value){
        return /^[+]?[0-9]\d*$/.test(value);
    },
    interValInt:function(value){
        return /^([0-9]|[1-9][0-9]|100)$/.test(value);
    },
    range:function(value,param){
        if(/^[1-9]\d*$/.test(value)){
            return value >= param[0] && value <= param[1]
        }else{
            return false;
        }
    },
    rangeToFixed:function(value,param){
        if(/^\d{0,7}(\.\d{1,2})?$/.test(value)){
            return value >= param[0] && value <= param[1]
        }else{
            return false;
        }
    },
    rangeToAll:function(value,param){
        if(/^-?\d{0,7}(\.\d{1,2})?$/.test(value)){
            return value >= param[0] && value <= param[1]
        }else{
            return false;
        }

    },
    /**
     *编辑表格列关联校验
     * @param value
     * @param obj  关联对象
     * @flag gt 大于 lt 小于
     */
    relation:function(value,obj){
        var inputVal;
        var flag;
        if(obj && obj.length){
            var inputName = obj[0];
            flag = obj[1];
            var tableId = obj[2] ? obj[2] : "";
            if (tableId) {
                inputVal = $("#" + tableId).find("input[name='" + inputName + "']").val();
            } else {
                inputVal = $("input[name='" + inputName + "']").val();
            }
        }else{
            return true;
        }
        if(value !== "" && inputVal !== ""){
            if(flag == "gt"){
                if(value >= inputVal){
                    return true;
                }else{
                    return false;
                }
            }else if(flag == "lt"){
                if(value <= inputVal){
                    return true;
                }else{
                    return false;
                }
            }

        }else{
            return true
        }

    },
    /**
     * 校验输入数字的范围且数字是浮点数
     * @param value
     * @param param
     * @param fixVal
     * @returns {boolean}
     */
    numberFloat: function (value, param, fixVal) {
        if (value !== "") {
            if (/^(-?\d+)(\.\d+)?$/.test(value)) {
                var _p0 = parseFloat(parseFloat(param[0]).toFixed(fixVal));
                var _p1 = parseFloat(parseFloat(param[1]).toFixed(fixVal));
                return value >= _p0 && value <= _p1
            } else {
                return false;
            }
        } else {
            //return true;
        }
    },
    /**
     * 校验输入数字的范围且数字是整数
     * @param value
     * @param param
     * @returns {boolean}
     */
    numberInteger:function(value, param){
        if (value != "") {
            if (/^[0-9]*$/.test(value)) {
                var _p0 = parseInt(param[0]);
                var _p1 = parseInt(param[1]);
                return value >= _p0 && value <= _p1
            } else {
                return false;
            }
        } else {
            //return true;
        }
    },
    minLength:function(value,param){
        if (value != "") {
            return value.length >= param[0]
        } else {
            return true;
        }
    },
    maxLength:function(value,param){
        if (value != "") {
            return value.length <= param[0]
        }else{
            return true;
        }

    },
    //select即选择框的验证
    selectValid:function(value,param){
        if(value == param[0]){
            return false;
        }else{
            return true ;
        }
    },
    idCode:function(value,param){
        return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(value);
    },
    loginNameVal: function (value, param){
        return /^[\u0391-\uFFE5\w]+$/.test(value);
    },
    branchNameVal:function (value){
        return /^[\u4e00-\u9fa5_a-zA-Z0-9]+$/.test(value);
    },
    passVal:function (value){
        return /^[0-9a-zA-Z]{6,20}$/.test(value);
    },
    loginName: function (value){
        if(value.length>20)
            return false
        else
            return /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/.test(value)||/^1\d{10}$/.test(value);
    },
    email: function (value){
        if(value!=""){
            if(value.length>30)
                return false;
            else
                return /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/.test(value);
        }else{
            return true
        }
    },
    birthday: function (value){
        return /^((?:19|20)\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/.test(value);
    },
    equalTo: function (value, param){
        return value == $(param[0]).val();
    },
    englishOrNum :function(value)  {// 只能输入英文和数字
        return /^[a-zA-Z0-9_ ]{1,}$/.test(value);
    },
    xiaoshu:function(value){
        return /^(([1-9]+)|([0-9]+\.[0-9]{1,2}))$/.test(value);
    },
    ddPrice:function(value,param){
        if(/^[1-9]\d*$/.test(value)){
            return value >= param[0] && value <= param[1];
        }else{
            return false;
        }
    },
    integral:function(value,param){
        if(/^[0-9]\d*$/.test(value)){
            return value >= param[0] && value <= param[1];
        }else{
            return false;
        }
    },
    jretailUpperLimit:function(value,param){
        if(/^[0-9]+([.]{1}[0-9]{1,2})?$/.test(value)){
            return parseFloat(value) > parseFloat(param[0]) && parseFloat(value) <= parseFloat(param[1]);
        }else{
            return false;
        }
    },
    rateCheck: function (value, param){
        if (/^[0-9]+([.]{1}[0-9]{1,2})?$/.test(value)) {
            return parseFloat(value) > parseFloat(param[0]) && parseFloat(value) <= parseFloat(param[1]);
        } else {
            return false;
        }
    },
    NotEqual: function (value, param){
        return value != param;
    },
    validatePassword:function (value) {
        if (/^[0-9]*$/g.test(value) && value.length == 6) {
            return true;
        } else {
            return false;
        }
    },
    checkPw: function (value, param){
        return value == $('' + param).val();
    },
    barCodeVal:function(value){//商品条码验证  数字 字母 下划线的组合
        return /^[a-zA-Z0-9_ ]{1,13}$/.test(value);
    },
    /**
     * 正则匹配url
     * @param value
     * @returns {boolean}
     * (1)地址必须以http/https/ftp/ftps开头
     * (2)地址不能包含双字节符号或非链接特殊字符
     */
    matchUrl:function(value){
        var _match = /^((ht|f)tps?):\/\/[\w\-]+(\.[\w\-]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?$/;
        return _match.test(value);
    },
    /**
     * 本验证规则,与jquery.easyui绑定使用
     * 脱离使用参数2中的msg将不能正确显示
     * @param value 验证对象的值
     * @param param 参数
     * @returns {boolean}
     * param:[
     *      0:url验证请求,
     *      1:alias传递到后台的别名,
     *      [2:{
         *          [params:['id']其他的参数],
         *          [msg:验证不通过时的消息]默认消息,输入值不符合验证规则,请修改
         *      }]非必选参数
     * ]
     */
    ajaxValidate:function(value,param){
        var data={};
        data[param[1]]=value;
        if(param[2]){
            if(param[2]["params"]){
                for(var key in param[2]["params"]){
                    //对easyui进行兼容,先按照ID作为选择器查找
                    var param_obj = $("#"+param[2]["params"][key]);
                    if(param_obj.length==0){//如果选择器未筛选元素
                        //把参数当做name筛选
                        param_obj = $("[name='"+param[2]["params"][key]+"']");
                    }else{//如果能找到对应元素则判断是easyui元素
                        if(param_obj.is("[texboxname]")){
                            //如果是,则找当前元素的兄弟节点的下一个中的有name属性的对象
                            param_obj = param_obj.next().find("[name]");
                        }//不是,则要找的对象就是它本身
                    }
                    if(param_obj.length>0){
                        data[param[2]["params"][key]]=param_obj.val();
                    }
                }
            }
        }
        var resultJson= $.parseJSON($.ajax({url:param[0],dataType:"json",data:data,async:false,cache:false,type:"post"}).responseText);
        return resultJson.success == 0;
        return false
    },
    validateStartDate :function (value){
        var cronEndAt = $('#cronEndAt').datebox('getValue')
        if(cronEndAt){
            return value <= cronEndAt
        }else{
            return true;
        }
    },
    validateEndDate :function (value){
        var cronStartAt = $('#cronStartAt').datebox('getValue')
        if(cronStartAt){
            return value >= cronStartAt
        }else{
            return true;
        }
    }
};